module et {
    export interface IEvent {
        handle(args?: any): Promise<any>;
    }
    export abstract class EventHanddle<T>{
        public async handle(args: T): Promise<void> {
            await this.run(args);
        }
        public abstract run(args: T): Promise<void>;
    }
    export abstract class ReceiveEventHanddle<T>{
        public async handle(): Promise<T> {
            return await this.run();
        }
        public abstract run(): Promise<T>;
    }
}